# 生产者和消费者问题（使用队列解决）
from threading import Thread, current_thread
from queue import Queue
import time
import random

queue = Queue(5)


class ProducerThread(Thread):
    def run(self) -> None:
        name = current_thread().getName()
        global queue
        while True:
            num = random.choice(range(100))
            queue.put(num)
            print('生产者 %s 生产了数据 %s ' % (name, num))
            t = random.randint(1, 3)
            time.sleep(1)
            print('生产者 %s 睡眠了多少 %s 秒 ' % (name, t))


class ConsumerThread(Thread):
    def run(self) -> None:
        name = current_thread().getName()
        global queue
        while True:
            num = queue.get()
            queue.task_done()
            print('消费者 %s 消费了数据 %s ' % (name, num))
            t = random.randint(1, 3)
            time.sleep(1)
            print('生产者 %s 睡眠了多少 %s 秒 ' % (name, t))


if __name__ == '__main__':
    ProducerThread(name='p1').start()
    ProducerThread(name='p2').start()
    ProducerThread(name='p3').start()
    ConsumerThread(name='c1').start()
    ConsumerThread(name='c2').start()
